CAN2无法发送和接收数据问题重要原因 |
您所在的位置:网站首页 › Arduino 引脚中断 › CAN2无法发送和接收数据问题重要原因 |
一、CAN2无法发送数据 在调试CAN2总线收发过程中,官方给的代码例程是是CAN1的,根据CAN1的直接转换为CAN2,是不能正常收发的。单独使用CAN2的时候,在确保硬件连接正常情况下,必须先要打开CAN1的时钟,再打开CAN2时钟,顺序不能反。 二、CAN2无法接收数据 CAN_Filter的0-14是对应CAN1用的,15-27是对应CAN2用的。如果配置错了,CAN接收就不成功。 比如CAN2需要进行如下配置才能接收成功: /*HAL库*/ sFilterConfig.FilterBank = 15; /* 过滤器15 */ /*STD库*/ CAN_FilterInitStructure.CAN_FilterNumber=15; /* 过滤器15 */ 三、在使用正点原子f407ZG时,打开CAN中断,可能会报错,可以这样修改: 原来的代码 #if CAN_RX0_INT_ENABLE /* 使用中断接收 */ __HAL_CAN_ENABLE_IT(&g_canx_handler, CAN_IT_RX_FIFO0_MSG_PENDING); /* FIFO0消息挂号中断允许 */ HAL_NVIC_EnableIRQ(USB_LP_CAN2_RX0_IRQn); /* 使能CAN中断 */ HAL_NVIC_SetPriority(USB_LP_CAN2_RX0_IRQn, 1, 0); /* 抢占优先级1,子优先级0 */ #endif void USB_LP_CAN2_RX0_IRQHandler(void) { printf("Interrupt triggering\n"); }修改后的代码 #if CAN_RX0_INT_ENABLE /* 使用中断接收 */ __HAL_CAN_ENABLE_IT(&g_canx_handler, CAN_IT_RX_FIFO0_MSG_PENDING); /* FIFO0消息挂号中断允许 */ HAL_NVIC_EnableIRQ(CAN2_RX0_IRQn); /* 使能CAN中断 */ HAL_NVIC_SetPriority(CAN2_RX0_IRQn, 1, 0); /* 抢占优先级1,子优先级0 */ #endif void CAN2_RX0_IRQHandler(void) { printf("Interrupt triggering\n"); }四、还可能会报很多未定义的 比如下图: 只需改成下图就行,对应的.h文件也改一下就可以了(至于为什么之前的被屏蔽了,我也不知道,有大神的话可以评论区探讨一下) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |